Перейти к основному содержимому

5.12. Синтаксис

Разработчику Архитектору

Синтаксис

Синтаксис Groovy значительно проще:

// Переменные без указания типа
def name = "Alice"
println "Hello, $name"

// Замыкания
def greet = { name -> println "Hello, $name" }
greet("Bob")

// Списки
def list = [1, 2, 3]

// Мапы
def map = [name: "John", age: 30]

// Работа с файлами
new File('test.txt').eachLine { line ->
println line
}

// Исключения
try {
def result = 1 / 0
} catch (e) {
println "Error: ${e.message}"
}

Фреймворки и инструменты Groovy:

НазваниеОписание
GrailsMVC-фреймворк для веб-приложений, аналог Spring Boot, но более DSL-ориентированный.
SpockФреймворк для тестирования, позволяет писать читаемые и выразительные тесты.
GradleСистема сборки, использующая Groovy (или Kotlin DSL) для описания билда.
MicronautЛегковесный фреймворк для микросервисов, поддерживает Groovy.
QuarkusСовременный фреймворк для GraalVM и контейнеров, поддерживает Groovy.
GebБраузерный тестовый фреймворк на основе WebDriver.

Сфера применения Groovy:

  1. Автоматизация задач – скрипты администрирования, обработка файлов, логов, данных.
  2. Тестирование – покрытие юнит-, интеграционного тестирования, использование Spock и JUnit.
  3. Веб-разработка – Grails, полноценный веб-фреймворк, и Micronaut, Quarkus его современные альтернативы.
  4. CI/CD – Jenkinsfile использует Groovy как основной DSL для описания пайплайнов.
  5. Сборка проектов – Gradle – де-факто стандарт для Android и Java-проектов.
  6. Обработка данных – Groovy удобен для скриптов обработки CSV, JSON, XML, SQL.

Важные классы и интерфейсы Groovy

Класс, интерфейсНазначение
ClosureАналог лямбда-выражений в Java, используется в Groovy активно.
Map, List, SetРасширенные возможности работы с коллекциями.
File, URL, URLConnectionУпрощённая работа с файлами и сетью.
GroovyShell, GroovyScriptEngineДля динамического исполнения Groovy-скриптов.
EvalВычисление строкового выражения (например, Eval.x(2, 'x + 1')).
ExpandoДинамический объект, можно добавлять поля и методы на лету.
MetaClassДля изменения поведения классов на лету.
DataSetДля работы с SQL-запросами и представлениями.
MarkupBuilder, StreamingMarkupBuilderГенерация XML/HTML.
JsonSlurper, JsonOutputЧтение и запись JSON.
XmlSlurper, XmlNodePrinterПарсинг и генерация XML.

Примеры часто встречающихся задач и решений:

  1. Парсинг JSON:
def json = '{"name":"Alice","age":25}'
def data = new groovy.json.JsonSlurper().parseText(json)
println data.name // Alice
  1. Запись JSON:
def data = [name: "Bob", age: 30]
def json = new groovy.json.JsonOutput().toJson(data)
println json
  1. Чтение XML:
def xml = '''
<people>
<person name="John"/>
</people>'''
def root = new XmlSlurper().parseText(xml)
println root.person.@name
  1. Генерация HTML:
def html = new groovy.xml.MarkupBuilder()
html.html {
head { title "Page Title" }
body {
h1 "Hello from Groovy!"
}
}